import type { LngLat } from './great-circle'

// segment: A-B, lngLat: C
export function lngLatToSegDist(lngLat: LngLat, ...coords: LngLat[]) {
  const dXBA = coords[1].lng - coords[0].lng
  const dYBA = coords[1].lat - coords[0].lat
  const dXCA = lngLat.lng - coords[0].lng
  const dYCA = lngLat.lat - coords[0].lat
  const cross = dXBA * dXCA + dYBA * dYCA
  if (cross <= 0) {
    return Math.sqrt(dXCA * dXCA + dYCA * dYCA)
  }
  const d2 = dXBA * dXBA + dYBA * dYBA
  if (cross >= d2) {
    const dXCB = lngLat.lng - coords[1].lng
    const dYCB = lngLat.lat - coords[1].lat
    return Math.sqrt(dXCB * dXCB + dYCB * dYCB)
  }
  const r = cross / d2
  const pX = dXCA - dXBA * r
  const pY = dYCA - dYBA * r
  return Math.sqrt(pX * pX + pY * pY)
}
